#include "GUISpelbord.h"

#include <QHBoxLayout>

// wordt gebruikt voor de graphics
#include "Toolbar.h"
#include "Spel.h"
#include "GUIRobot.h"

GUISpelbord::GUISpelbord(const Map& map, int gridSize, QWidget* parent)
	: QWidget( parent ), m_gridSize(gridSize)
{
	QHBoxLayout* layout = new QHBoxLayout(this);
	this->setLayout(layout);

	m_scene = new QGraphicsScene( QRectF(-m_gridSize, -m_gridSize, gridSize * map.width(), gridSize * map.height()), this);
	m_view = new QGraphicsView(m_scene, this);

	m_width = map.width();
	m_height = map.height();
	
	layout->addWidget(m_view);

	Toolbar	toolbar;
	for(int x = 0; x < m_width; x++)
		for(int y = 0; y < m_height; y++)
		{
			toolbar.select( QString(map.getVakje(x,y)->serialize().c_str()) );
			Tile* tile = new Tile(NULL, gridSize, toolbar.currentPixmap(), toolbar.currentString());
			tile->setPos( tile->mapFromScene( toWorldCoords(x, y) ) );
			m_scene->addItem(tile);
			m_tiles.push_back(tile);
		}
}

GUISpelbord::~GUISpelbord()
{
	for(size_t x = 0; x < m_tiles.size(); x++)
		delete m_tiles[x];

	m_tiles.clear();
}

#include <vector>
using std::vector;
#include "SpelerContext.h"
#include <QPixmap>

// deze toont gewoon de nieuwe toestand van het spel.. zorgt dus niet voor effecten of bewegingen (instantaniousley)
void GUISpelbord::update(Spel* spel)
{
	vector<SpelerContext>* spelers = spel->getSpelerCxts();
	if( m_robots.empty() )
	{
		// robots aanmaken en op bord plaatsen
		for(size_t i = 0; i < spelers->size(); i++)
		{
			GUIRobot* nieuwRobot = new GUIRobot(QPixmap(QString("resources/images/robots/") + QString((*spelers)[i].getRobot().getColor().c_str()) 
																							+ QString(".png") ));
			//
			m_robots[&((*spelers)[i].getRobot()) ] = nieuwRobot;
			nieuwRobot->update();
		}
	}
	
	for(size_t i = 0; i < spelers->size(); i++)
	{
		Robot* robke = &((*spelers)[i].getRobot());
		GUIRobot* guirob = m_robots[ robke ];
		guirob->setPos( guirob->mapFromScene( toWorldCoords(robke->getX(), robke->getY() ) ) );
		guirob->update();
	}
}
